package com.zhuoyue.biz.core.command.cmd.common.gateway;

import com.zhuoyue.common.utils.CmdUtils;
import lombok.Data;

import javax.validation.constraints.NotBlank;

import static com.zhuoyue.common.utils.RandomUtil.getStrHexRandom;

/**
 * @author wjming
 */
@Data
public class TimeTaskParam {
    /**
     * 网关MAC
     */
    @NotBlank(message = "网关地址不能为空")
    private String gatewayMac;

    /**
     * 随机数
     */
    private String random = getStrHexRandom(4);
    /**
     * 编号，1-8个存储编号
     */
    private String number;
    /**
     * 定时时间
     * 0x13:0x1E执行时间19点30分（默认00秒，不设置）设置范围0x00-0x0017，0x0000-0x003b，其他无效（24小时制）
     */
    private String time;
    /**
     * 执行次数
     * 0x02=2次
     */
    private String frequency;
    /**
     * 执行周期0x0005=5分钟，小端
     */
    private String cycle;

    /**
     * 执行日期01：礼拜一，按位表示，低位起依次表示礼拜一到礼拜日，7F表示全部；
     */
    private String date = "7F";
    /**
     * 执行规则01：重复，00：不重复
     */
    private String rule = CmdUtils.intToHexTwo(1);
    /**
     * 2A 0D 01 00 56 E2 CC FE FF 14 2E 84 00 00 01 C9 23
     * 具体命令（为后续未知设备的控制命令考虑，提供完整命令）
     * 此处实例：读取网关软件版本号
     */
    private String dealCmd;

    private String taskEnable;

    public void setNumber(Integer number) {
        this.number = CmdUtils.intToHexTwo(number);
    }

    public void setTaskEnable(int taskEnable) {
        this.taskEnable = CmdUtils.intToHexTwo(taskEnable);
    }

    /**
     * 定时时间
     * 0x13:0x1E执行时间19点30分（默认00秒，不设置）设置范围0x00-0x0017，0x0000-0x003b，其他无效（24小时制）
     */
    public void setTime(String time) {
        int hour = Integer.parseInt(time.substring(0, time.indexOf(':')));
        int minute = Integer.parseInt(time.substring(time.indexOf(':') + 1));
        this.time = CmdUtils.intToHexTwo(hour) + CmdUtils.intToHexTwo(minute);
    }

    /**
     * 执行次数
     * 0x02=2次
     */
    public void setFrequency(Integer frequency) {
        this.frequency = CmdUtils.intToHexTwo(frequency);
    }

    public void setCycle(Integer cycle) {
        String taskIntervalHex = CmdUtils.intToHexFour(cycle);
        taskIntervalHex = taskIntervalHex.substring(2, 4) + taskIntervalHex.substring(0, 2);
        this.cycle = taskIntervalHex;
    }


}
